package cn.lsh.mapper;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;
import java.util.StringTokenizer;

/**
 * map输出以下三种数据：
 * 原数据
 * 1、词在文件中出现的次数
 * 2、文件总个数count
 * 新数据
 * 3、各个词出现的文件的个数
 */
public class HotComment2Mapper extends Mapper<Text, Text, Text, IntWritable> {
	private final Text word = new Text();

	private final IntWritable one = new IntWritable(1);

	@Override
	protected void map(Text key, Text value, Context context) throws IOException, InterruptedException {
		//数据样本
		//台词_40270056	1
		//10247087	48

		FileSplit fs = (FileSplit) context.getInputSplit();
		if (!fs.getPath().getName().contains("part-r-00003")) {
			//part-r-00003的数据不处理，一个分区对应一个mapper task
			StringTokenizer st = new StringTokenizer(key.toString(), "_");
			//文件总分词数和分词计数直接输出
			one.set(Integer.parseInt(value.toString()));
			context.write(key, one);
			if (st.countTokens() > 1) {
				word.set(st.nextToken());
				//设置value为0，用于后面分区作为区分条件
				one.set(0);
				//输出词出现的文件的个数
				context.write(word, one);
			}
		} else {
			//直接输出原始文件总数统计数据
			one.set(Integer.parseInt(value.toString()));
			context.write(key, one);
		}
	}
}
